package Arrays.YiChang;

import javax.xml.crypto.Data;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class Demo01 {
    /*

    阅读异常信息： 从下往上看
        1、找异常错误位置
        2、异常名称
        3、异常原因

        编译时异常
        运行时异常



        异常的默认处理流程
            1、虚拟机会在出现异常的代码那里自动的创建一个异常对象:ArithmeticException
            2、异常会从方法中出现的点这里抛出给调用者，调用者最终抛出给JVM虚拟机
            3、虚拟机接收到异常对象后，先在控制台直接输出异常信息数据
            4、终止Java程序的运行
            5、后续代码没有机会执行了，因为程序已经噶了


     异常的处理方式：
        1、try...cath捕获异常

        好处: 异常对象可以被捕获，后续的代码可以继续执行
        格式：
            try{
            可能会出现异常的代码

            }catch(异常名称 对象名){
                异常的处理方案
            }

            执行流程：
                1、执行try{}中的代码，看是否会有异常对象产生
                2、没有：catch就不会捕获，后续代码继续执行
                3、有： catch捕获异常对象，执行catch{}中的处理方案，后续代码继续执行

            2、throws抛出异常

            问题：正在面临的异常，是否需要暴露出来
                --不需要暴露：try..catch
                --需要暴露: 抛出异常throw



     */
    public static void main(String[] args) throws ParseException, FileNotFoundException {
        System.out.println("开始");
        method(); // // new ArithmeticException(); JVM虚拟机
        try {
            int[] arr = null;
            System.out.println(arr[10]);// 空指针异常 抓不到  new NullPointerException
            System.out.println(10/0); //new ArithmeticException
        }catch (ArithmeticException arithmeticException){ // ArithmeticException arithmeticException = new ArithmeticException;出现异常刚往上抛异常就被新建对象接收
            System.out.println("捕获了运算异常");
        }catch (NullPointerException nullPointerException){ // 抓不到就在加一个捕获你空指针异常
            System.out.println(nullPointerException);
        }
        catch (Exception e){ // 优化后Exception就包含了编译时异常以及运行时异常
            System.out.println("捕获了异常");
        }
        System.out.println("结束");

    }
    public static void method() throws ParseException, FileNotFoundException {//声明这个方法会出现这个异常
//        System.out.println(10/0);// new ArithmeticException()
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
        Date data = simpleDateFormat.parse("abc");
        System.out.println(data);

        FileReader fileReader = new FileReader("D:\\A.txt");
    }
}
